package cn.piesat.scanning.dao;

import cn.piesat.scanning.dto.DbDmsAlgorithmResultStoreDTO;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;

import java.util.List;

/**
 * 专业处理产品结果数据信息持久层
 * @author xhl
 */
public interface DbDmsAlgorithmResultStoreDAO extends JpaRepository<DbDmsAlgorithmResultStoreDTO,String>, JpaSpecificationExecutor<DbDmsAlgorithmResultStoreDTO> {

    /**
     * 根据文件时次，数据等级集合查询结果数据集合
     * @param fileDate 文件时次
     * @param levels 数据等级集合
     * @return
     */
    List<DbDmsAlgorithmResultStoreDTO> findByFileDateBeforeAndDataLevelIn(String fileDate, List<String> levels);

    /**
     * 根据文件名称查询结果数据信息
     * @param fileName 文件名称
     * @return
     */
    DbDmsAlgorithmResultStoreDTO findByFilename(String fileName);

    /**
     * 根据正则匹配文件名称和时间范围查询
     * @param date 时间
     * @param fileNamePattern 文件名称正则
     * @return
     */
    @Query(nativeQuery = true, value ="select * from db_dms_algorithm_result_store " +
            " where FILEDATE <= :date and FILENAME regexp :fileNamePattern")
    List<DbDmsAlgorithmResultStoreDTO> regexAndDateRangeFind(String date, String fileNamePattern);

    List<DbDmsAlgorithmResultStoreDTO> findByFileDateAfterAndDataLevelIn(String limitTime, List<String> resultDataLevelList);

    void deleteByTaskPlanIdIn(List<String> taskPlanIds);

    List<DbDmsAlgorithmResultStoreDTO> findByDataLevelAndProductIdentifyInAndFileDateBetween(String level, List<String> asList, String startTime, String endTime);

    List<DbDmsAlgorithmResultStoreDTO> findByDataLevelAndProductIdentifyInAndFileDateBetweenAndFiletype(String level, List<String> asList, String startTime, String endTime,String fileType);


    void deleteByFileDateIn(List<String> deleteFileDates);

    /**
     * 根据文件类别，文件类型，文件时间查询结果数据
     * @param fileCatalog
     * @param filetype
     * @param fileDate
     * @return
     */
    List<DbDmsAlgorithmResultStoreDTO> findByFileCatalogAndFiletypeAndFileDate(String fileCatalog, String filetype, String fileDate);

    /**
     * 根据文件类别，文件类型，起止时间查询结果数据
     * @param fileCatalog
     * @param filetype
     * @param
     * @return
     */
    List<DbDmsAlgorithmResultStoreDTO> findByFileCatalogAndFiletypeAndFileDateBetween(String fileCatalog, String filetype, String leftTime,String rightTime);
}
